package co.inventario.datos.sqlserver;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import co.inventario.entidad.EmpleadoDTO;
import co.inventario.entidad.LoginDTO;

public class LoginDAOSQLServer {

	private String crearSQL;
	private String actualizarSQL;
	private String consultarSQL;

	public LoginDAOSQLServer() {
		crearSQL = "";
		actualizarSQL = "";
		consultarSQL = "";
	}

	public void crear(LoginDTO loginDTO, Connection connection) throws SQLException {
		crearSQL = "INSERT INTO Login (In_Codigo_Empleado, Nv_Usuario_Login, Nv_Clave_Login) VALUES (?, ?, ?)";
		try (PreparedStatement preparedStatement = connection.prepareStatement(crearSQL)) {
			preparedStatement.setInt(1, loginDTO.getEmpleadoDTO().getInCodigoEmpleado());
			preparedStatement.setString(2, loginDTO.getNvUsuarioLogin());
			preparedStatement.setString(3, loginDTO.getNvClaveLogin());
			preparedStatement.executeUpdate();
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema creando el Usuario: " + exception.getMessage());
		}
	}

	public void actualizar(LoginDTO loginDTO, Connection connection) throws SQLException {
		actualizarSQL = "UPDATE Login SET In_Codigo_Empleado = ISNULL(?, In_Codigo_Empleado), Nv_Usuario_Login = ISNULL(?, Nv_Usuario_Login), Nv_Clave_Login = ISNULL(?, Nv_Clave_Login) WHERE In_Codigo_Login = ?";
		try (PreparedStatement preparedStatement = connection.prepareStatement(actualizarSQL)) {
			preparedStatement.setInt(1, loginDTO.getEmpleadoDTO().getInCodigoEmpleado());
			preparedStatement.setString(2, loginDTO.getNvUsuarioLogin());
			preparedStatement.setString(3, loginDTO.getNvClaveLogin());
			preparedStatement.setInt(4, loginDTO.getInCodigoLogin());
			preparedStatement.executeUpdate();
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema actualizando el Usuario: " + exception.getMessage());
		}
	}

	public LoginDTO consultarPorCodigo(LoginDTO loginDTO, Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM Login WHERE In_Codigo_Login = ?";
		LoginDTO loginDTOResultado = null;
		EmpleadoDTO empleadoDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			preparedStatement.setInt(1, loginDTO.getInCodigoLogin());
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				loginDTOResultado = new LoginDTO();
				loginDTOResultado.setInCodigoLogin(resultSet.getInt("In_Codigo_Login"));
				empleadoDTO = new EmpleadoDTO();
				empleadoDTO.setInCodigoEmpleado(resultSet.getInt("In_Codigo_Empleado"));
				loginDTOResultado.setEmpleadoDTO(empleadoDTO);
				loginDTOResultado.setNvUsuarioLogin(resultSet.getString("Nv_Usuario_Login"));
				loginDTOResultado.setNvClaveLogin(resultSet.getString("Nv_Clave_Login"));
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando el Usuario a traves del codigo: " + exception.getMessage());
		}
		return loginDTOResultado;
	}

	public LoginDTO consultarPorUsuario(LoginDTO loginDTO, Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM Login WHERE Nv_Usuario_Login = ?";
		LoginDTO loginDTOResultado = null;
		EmpleadoDTO empleadoDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			preparedStatement.setString(1, loginDTO.getNvUsuarioLogin());
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				loginDTOResultado = new LoginDTO();
				loginDTOResultado.setInCodigoLogin(resultSet.getInt("In_Codigo_Login"));
				empleadoDTO = new EmpleadoDTO();
				empleadoDTO.setInCodigoEmpleado(resultSet.getInt("In_Codigo_Empleado"));
				loginDTOResultado.setEmpleadoDTO(empleadoDTO);
				loginDTOResultado.setNvUsuarioLogin(resultSet.getString("Nv_Usuario_Login"));
				loginDTOResultado.setNvClaveLogin(resultSet.getString("Nv_Clave_Login"));
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando el Usuario a traves del usuario: " + exception.getMessage());
		}
		return loginDTOResultado;
	}

	public ArrayList<LoginDTO> consultarTodo(Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM Login";
		LoginDTO loginDTOResultado = null;
		EmpleadoDTO empleadoDTO = null;
		ArrayList<LoginDTO> loginDTOLista = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				loginDTOResultado = new LoginDTO();
				loginDTOResultado.setInCodigoLogin(resultSet.getInt("In_Codigo_Login"));
				empleadoDTO = new EmpleadoDTO();
				empleadoDTO.setInCodigoEmpleado(resultSet.getInt("In_Codigo_Empleado"));
				loginDTOResultado.setEmpleadoDTO(empleadoDTO);
				loginDTOResultado.setNvUsuarioLogin(resultSet.getString("Nv_Usuario_Login"));
				loginDTOResultado.setNvClaveLogin(resultSet.getString("Nv_Clave_Login"));
				loginDTOLista = new ArrayList<LoginDTO>();
				loginDTOLista.add(loginDTOResultado);
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando los Usuarios: " + exception.getMessage());
		}
		return loginDTOLista;
	}
}
